#include <algorithm>
#include <iostream>
#include <string>

using ll = long long;

auto &is = std::cin;
auto &os = std::cout;

std::string m, r;

void dfs(const std::string_view &sv)noexcept{
    if(sv.size()==0){
        return;
    }
    ll max_rpos{};
    for(auto &i:sv){
        max_rpos = std::max((ll)r.find(i),max_rpos);
    }
    
    const ll sv_root_pos{(ll)sv.find(r[max_rpos])};

    os<<sv[sv_root_pos];
    dfs(std::string_view(sv.data(),sv_root_pos));
    dfs(std::string_view(sv.begin()+sv_root_pos+1,sv.size()-sv_root_pos-1));
}

int main(){
    is>>m>>r;
    os<<r.back();
    dfs(std::string_view(m.data(),m.find(r.back())));
    dfs(std::string_view(m.data()+1+m.find(r.back())
                                ,m.size()-m.find(r.back())-1));
    os<<'\n';
}